package com.demo.java.OD151_200.OD166;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【双十一】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145779446
 */
public class OdMain {
    public static void main(String[] args) {
        try (Scanner s = new Scanner(System.in)) {
            String m = s.nextLine(); // 读取商品价格列表
            int r = s.nextInt(); // 读取预算R
            solveMethod(m, r); // 调用方法进行计算
        }
    }

    private static void solveMethod(String m, int r) {
        // 将输入的商品价格字符串按逗号分割并转换为整数
        String[] goodsPricesString = m.split(",");
        int[] goodsPrices = new int[goodsPricesString.length];
        for (int i = 0; i < goodsPricesString.length; ++i) {
            goodsPrices[i] = Integer.parseInt(goodsPricesString[i]);
        }

        // 对商品价格进行排序
        Arrays.sort(goodsPrices);

        int maxSum = -1; // 初始化最大和为-1，表示未找到合法组合

        // 使用双指针法来查找符合条件的组合
        for (int i = 0; i < goodsPrices.length - 2; i++) {
            int j = i + 1; // j指向i后的商品
            int k = goodsPrices.length - 1; // k指向最后一个商品

            while (j < k) {
                // 计算当前三个商品的总和
                int sum = goodsPrices[i] + goodsPrices[j] + goodsPrices[k];

                // 如果总和小于等于预算R，更新最大和
                if (sum <= r) {
                    maxSum = Math.max(maxSum, sum);
                    j++; // 向右移动j指针，尝试增大总和
                } else {
                    k--; // 向左移动k指针，尝试减小总和
                }
            }
        }

        // 输出结果
        System.out.println(maxSum);
    }
}